package com.opal.modules.costReportForm.service;

import com.opal.domain.R;
import com.opal.domain.ReturnMessageData;
import com.opal.model.DataGridData;
import com.opal.modules.costReportForm.entity.CostReport;
import com.opal.modules.costReportForm.entity.CostReportCondition;
import com.opal.modules.costReportForm.model.CostReportData;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

public interface CostReportService {

    //添加上传的产品图片
    public R costReportUploadFile(MultipartFile file) throws IOException;

    //删除上传的产品图片
    R deleteCostReportUploadFile(String filePath);

    /**
     * 新增成本报告表：保存(成本报告状态为0)
     * @param costReport
     * @param costReportData
     * @return
     */
    ReturnMessageData costReportSave(CostReport costReport, CostReportData costReportData);

    /**
     * 新增成本报告表：保存并直接提交(成本报告状态为1)
     * @param costReport
     * @param costReportData
     * @return
     */
    Object costReportSaveAuditService(CostReport costReport, CostReportData costReportData) throws IOException, Exception;

    /**
     * 根据条件分页查询成本报告单据，封装到easyui数据表格中
     * @param costReport
     * @param dataGrid
     * @return
     */
    DataGridData<List<CostReportCondition>> pagingQueryCostReportService(CostReportCondition costReport, DataGridData<Integer> dataGrid);

    /**
     * 根据条件查询成本报告表 ---用于刷选报价单的数据
     * @param costReport    条件
     * @param page  页面
     * @param limit  每月数据
     * @return  easyui的表格
     */
    Object pagingQueryCostReportService(CostReportCondition costReport, Integer page,Integer limit);

    /**
     * 判断给予字段不能为null，若是null进行删除
     * @return
     */
    int deleteFieldIsNullService();

    /**
     * 进行关闭easyui-datagrid，进行判断有没有填写必填项，若没有证明是用户放弃本次的成本报告输入
     * @param costReportId
     * @return
     */
    Object deleteFieldIsNullByCostReportIdService(String costReportId,String costImagePath);

    /**
     * 根据状态删除成本报告表
     * @param costReportId  成本单据号
     * @return  R   msg：消息，status 状态
     */
    R deleteCostReportService(String costReportId);

    /**
     * 根据成本报告获取cost_report表信息
     * @param banben
     * @return
     */
    CostReport isCostReportStatusService(String banben);

    /**
     * 根据流程实例获取审批人的操作：同意、拒绝
     * @param processInstanceId
     * @return
     */
    Object getApproverOperationStatusService(String processInstanceId);

    /**
     * 根据有权限的人或本人修改报价单编号
     * @param costReport
     * @return
     */
    Object updateQuotationService(CostReport costReport);

    /**
     * 根据成本报告单据号和用户id，修改授权人
     * @param userId
     * @param costReportId
     * @return
     */
    Object updateAppointUserIdService(Long userId, String costReportId);

    /**
     * 授权页面获取layui表格数据
     * @param costReport 成本报告对象
     */
    Object selectAccreditUpdateQuotationService(CostReport costReport,Integer page,Integer limit,String userName);

    /**
     * 管理员直接进行给成本报告进行授权修改成报价单编号
     * @param userId
     * @param costReportId
     * @return
     */
    Object updateSystemAppointUserIdService(Long userId, String costReportId);

    /**
     * 修改成本报告
     * @param costReport
     * @return
     */
    Object updateCostReportService(CostReport costReport);

    /**
     * 更改成本报告状态：正常/停用
     * @param costReportId
     * @return
     */
    R SUCostReport(String costReportId);

}
